<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"/>
<title>如何创建 DataSource</title><link href="../zdoc.css" rel="stylesheet" type="text/css"/><link href="../_rs/site.css" rel="stylesheet" type="text/css"/><script src="../_rs/site.js" language="Javascript"></script><script src="../_rs/jquery.js" language="Javascript"></script><script src="../_rs/z.js" language="Javascript"></script>
</head>
<body><a name="top"></a>
<div class="zdoc_header">如何创建 DataSource</div>
<div class="zdoc_author"><em>By:</em><b>zozoh</b><a href="mailto:zozohtnt@gmail.com">&lt;zozohtnt@gmail.com&gt;</a><b>wendal</b><a href="mailto:wendal1985@gmail.com">&lt;wendal1985@gmail.com&gt;</a></div>
<div class="zdoc_body">
<ul class="zdoc_index_table">
<li>
<div class="zdoc_folder"><span class="num">1</span><a href="#内置的SimpleDataSource">内置的SimpleDataSource</a></div>
<ul>
<li>
<div><span class="num">1.1</span><a href="#Nutz内置,非常适合新手!!">Nutz内置,非常适合新手!!</a></div>
</li>
<li>
<div><span class="num">1.2</span><a href="#SimpleDataSource:_直接书写_Java_代码">SimpleDataSource: 直接书写 Java 代码</a></div>
</li>
<li>
<div><span class="num">1.3</span><a href="#SimpleDataSource:_通过_NutzIoc_的_JSON_配置文件">SimpleDataSource: 通过 Nutz.Ioc 的 JSON 配置文件</a></div>
</li>
<li>
<div><span class="num">1.4</span><a href="#SimpleDataSource:_通过_NutzIoc_的_XML_配置文件">SimpleDataSource: 通过 Nutz.Ioc 的 XML 配置文件</a></div>
</li>
<li>
<div><span class="num">1.5</span><a href="#附送一个完整的NutDao配置js文件">附送一个完整的NutDao配置js文件</a></div>
</li>
</ul>
</li>
<li>
<div class="zdoc_folder"><span class="num">2</span><a href="#Apache_DBCP">Apache DBCP</a></div>
<ul>
<li>
<div><span class="num">2.1</span><a href="#dbcp:_直接书写_Java_代码">dbcp: 直接书写 Java 代码</a></div>
</li>
<li>
<div><span class="num">2.2</span><a href="#dbcp:_通过_NutzIoc_的_JSON_配置文件">dbcp: 通过 Nutz.Ioc 的 JSON 配置文件</a></div>
</li>
<li>
<div><span class="num">2.3</span><a href="#dbcp:_通过_NutzIoc_的_XML_配置文件">dbcp: 通过 Nutz.Ioc 的 XML 配置文件</a></div>
</li>
</ul>
</li>
<li>
<div class="zdoc_folder"><span class="num">3</span><a href="#C3P0">C3P0</a></div>
<ul>
<li>
<div><span class="num">3.1</span><a href="#c3p0:_直接书写_Java_代码">c3p0: 直接书写 Java 代码</a></div>
</li>
<li>
<div><span class="num">3.2</span><a href="#c3p0:_通过_NutzIoc_的_JSON_配置文件">c3p0: 通过 Nutz.Ioc 的 JSON 配置文件</a></div>
</li>
<li>
<div><span class="num">3.3</span><a href="#c3p0:_通过_NutzIoc_的_XML_配置文件">c3p0: 通过 Nutz.Ioc 的 XML 配置文件</a></div>
</li>
</ul>
</li>
<li>
<div class="zdoc_folder"><span class="num">4</span><a href="#Proxool">Proxool</a></div>
<ul>
<li>
<div><span class="num">4.1</span><a href="#proxool:_直接书写_Java_代码">proxool: 直接书写 Java 代码</a></div>
</li>
<li>
<div><span class="num">4.2</span><a href="#proxool:_通过_NutzIoc_的_JSON_配置文件">proxool: 通过 Nutz.Ioc 的 JSON 配置文件</a></div>
</li>
<li>
<div><span class="num">4.3</span><a href="#proxool:_通过_NutzIoc_的_XML_配置文件">proxool: 通过 Nutz.Ioc 的 XML 配置文件</a></div>
</li>
</ul>
</li>
<li>
<div class="zdoc_folder"><span class="num">5</span><a href="#BoneCP">BoneCP</a></div>
<ul>
<li>
<div><span class="num">5.1</span><a href="#bonecp:_直接书写_Java_代码">bonecp: 直接书写 Java 代码</a></div>
</li>
<li>
<div><span class="num">5.2</span><a href="#bonecp:_通过_NutzIoc_的_JSON_配置文件">bonecp: 通过 Nutz.Ioc 的 JSON 配置文件</a></div>
</li>
<li>
<div><span class="num">5.3</span><a href="#bonecp:_通过_NutzIoc_的_XML_配置文件">bonecp: 通过 Nutz.Ioc 的 XML 配置文件</a></div>
</li>
</ul>
</li>
</ul>
<div class="hr"><b></b></div>
<h1><a name="内置的SimpleDataSource"></a>内置的SimpleDataSource</h1>
<div style="float:right;"><a href="#top">Top</a></div>
<h2><a name="Nutz内置,非常适合新手!!"></a>Nutz内置,非常适合新手!!</h2>
<div style="float:right;"><a href="#top">Top</a></div>
<p></p>
<ul type="disc">
<li>自动加载NutDao所支持的数据库的驱动</li>
<li>无额外依赖,适合新手试用</li>
<li>非连接池,配置简单</li>
<li>不建议在生产环境使用</li>
<li>1.b.43开始提供,旧版本的Nutz可通过拷贝源文件的方式添加这个类</li>
</ul>
<h2><a name="SimpleDataSource:_直接书写_Java_代码"></a>SimpleDataSource: 直接书写 Java 代码</h2>
<div style="float:right;"><a href="#top">Top</a></div>
<pre>import org.nutz.dao.impl.SimpleDataSource;

...

SimpleDataSource ds = new SimpleDataSource();
//ds.setDriverClassName("org.postgresql.Driver"); //默认加载了大部分数据库的驱动!!
ds.setjdbcUrl("jdbc:postgresql://localhost:5432/mydatabase");
ds.setUsername("demo");
ds.setPassword("123456");
...
//ds.close();  // 这个DataSource不是一个连接池,所以关不关都行
</pre>
<p></p>
<h2><a name="SimpleDataSource:_通过_NutzIoc_的_JSON_配置文件"></a>SimpleDataSource: 通过 Nutz.Ioc 的 JSON 配置文件</h2>
<div style="float:right;"><a href="#top">Top</a></div>
<pre>{
	dataSource : {
		type : "org.nutz.dao.impl.SimpleDataSource",
		fields : {
			jdbcUrl : 'jdbc:postgresql://localhost:5432/mydatabase',
			username : 'demo',
			password : '123456'
		}
	}
}
</pre>
<p></p>
<h2><a name="SimpleDataSource:_通过_NutzIoc_的_XML_配置文件"></a>SimpleDataSource: 通过 Nutz.Ioc 的 XML 配置文件</h2>
<div style="float:right;"><a href="#top">Top</a></div>
<pre>	&lt;ioc xsi:noNamespaceSchemaLocation="nutz-ioc-0.1.xsd"&gt;
		&lt;obj name="dataSource" type="org.nutz.dao.impl.SimpleDataSource"&gt;
			&lt;field name="jdbcUrl"&gt;&lt;str&gt;jdbc:postgresql://localhost:5432/mydatabase&lt;/str&gt;&lt;/field&gt;
			&lt;field name="username"&gt;&lt;str&gt;demo&lt;/str&gt;&lt;/field&gt;
			&lt;field name="password"&gt;&lt;str&gt;123456&lt;/str&gt;&lt;/field&gt;
		&lt;/obj&gt;
	&lt;/ioc&gt;
</pre>
<p></p>
<h2><a name="附送一个完整的NutDao配置js文件"></a>附送一个完整的NutDao配置js文件</h2>
<div style="float:right;"><a href="#top">Top</a></div>
<p></p>
<pre>var ioc = {
	dao : {
		type : "org.nutz.dao.impl.NutDao",
		args : [{refer:"dataSource"}]
	},
	dataSource : {
		type : "org.nutz.dao.impl.SimpleDataSource",
		fields : {
			jdbcUrl : 'jdbc:postgresql://localhost:5432/mydatabase',
			username : 'demo',
			password : '123456'
		}
	}
}
</pre>
<div class="hr"><b></b></div>
<h1><a name="Apache_DBCP"></a>Apache DBCP</h1>
<div style="float:right;"><a href="#top">Top</a></div>
<h2><a name="dbcp:_直接书写_Java_代码"></a>dbcp: 直接书写 Java 代码</h2>
<div style="float:right;"><a href="#top">Top</a></div>
<pre>import org.apache.commons.dbcp.BasicDataSource;

...

BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("org.postgresql.Driver");
ds.setUrl("jdbc:postgresql://localhost:5432/mydatabase");
ds.setUsername("demo");
ds.setPassword("123456");
...
ds.close();  // 关闭池内所有连接
</pre>
<h2><a name="dbcp:_通过_NutzIoc_的_JSON_配置文件"></a>dbcp: 通过 Nutz.Ioc 的 JSON 配置文件</h2>
<div style="float:right;"><a href="#top">Top</a></div>
<pre>{
	dataSource : {
		type : "org.apache.commons.dbcp.BasicDataSource",
		events : {
			depose : 'close'
		},
		fields : {
			driverClassName : 'org.postgresql.Driver',
			url : 'jdbc:postgresql://localhost:5432/mydatabase',
			username : 'demo',
			password : '123456'
		}
	}
}
</pre>
<h2><a name="dbcp:_通过_NutzIoc_的_XML_配置文件"></a>dbcp: 通过 Nutz.Ioc 的 XML 配置文件</h2>
<div style="float:right;"><a href="#top">Top</a></div>
<pre>	&lt;ioc xsi:noNamespaceSchemaLocation="nutz-ioc-0.1.xsd"&gt;
		&lt;obj name="dataSource" type="org.apache.commons.dbcp.BasicDataSource"&gt;
			&lt;events&gt;
				&lt;depose&gt;close&lt;/depose&gt;
			&lt;/events&gt;
			&lt;field name="driverClassName"&gt;&lt;str&gt;org.postgresql.Driver&lt;/str&gt;&lt;/field&gt;
			&lt;field name="url"&gt;&lt;str&gt;jdbc:postgresql://localhost:5432/mydatabase&lt;/str&gt;&lt;/field&gt;
			&lt;field name="username"&gt;&lt;str&gt;demo&lt;/str&gt;&lt;/field&gt;
			&lt;field name="password"&gt;&lt;str&gt;123456&lt;/str&gt;&lt;/field&gt;
		&lt;/obj&gt;
	&lt;/ioc&gt;
</pre>
<ul type="disc">
<li>注册了 depose 事件，当整个 Ioc 容器注销时，将 <b>真正 </b>  关闭所有池内连接</li>
<li>关于 depose 事件，更多详情请参看 <a href="../ioc/events.html">事件监听</a></li>
</ul>
<div class="hr"><b></b></div>
<h1><a name="C3P0"></a>C3P0</h1>
<div style="float:right;"><a href="#top">Top</a></div>
<h2><a name="c3p0:_直接书写_Java_代码"></a>c3p0: 直接书写 Java 代码</h2>
<div style="float:right;"><a href="#top">Top</a></div>
<pre>import com.mchange.v2.c3p0.ComboPooledDataSource;

...

ComboPooledDataSource ds = new ComboPooledDataSource();
ds.setDriverClass("org.postgresql.Driver");
ds.setJdbcUrl("jdbc:postgresql://localhost:5432/mydatabase");
ds.setUser("demo");
ds.setPassword("123456");
...
ds.close();  // 关闭池内所有连接
</pre>
<h2><a name="c3p0:_通过_NutzIoc_的_JSON_配置文件"></a>c3p0: 通过 Nutz.Ioc 的 JSON 配置文件</h2>
<div style="float:right;"><a href="#top">Top</a></div>
<pre>{
	dataSource : {
		type : "com.mchange.v2.c3p0.ComboPooledDataSource",
		events : {
			depose : 'close'
		},
		fields : {
			driverClass : 'org.postgresql.Driver',
			jdbcUrl : 'jdbc:postgresql://localhost:5432/mydatabase',
			user : 'demo',
			password : '123456'
		}
	}
}
</pre>
<h2><a name="c3p0:_通过_NutzIoc_的_XML_配置文件"></a>c3p0: 通过 Nutz.Ioc 的 XML 配置文件</h2>
<div style="float:right;"><a href="#top">Top</a></div>
<pre>	&lt;ioc xsi:noNamespaceSchemaLocation="nutz-ioc-0.1.xsd"&gt;
		&lt;obj name="dataSource" type="com.mchange.v2.c3p0.ComboPooledDataSource"&gt;
			&lt;events&gt;
				&lt;depose&gt;close&lt;/depose&gt;
			&lt;/events&gt;
			&lt;field name="driverClass"&gt;&lt;str&gt;org.postgresql.Driver&lt;/str&gt;&lt;/field&gt;
			&lt;field name="jdbcUrl"&gt;&lt;str&gt;jdbc:postgresql://localhost:5432/mydatabase&lt;/str&gt;&lt;/field&gt;
			&lt;field name="user"&gt;&lt;str&gt;demo&lt;/str&gt;&lt;/field&gt;
			&lt;field name="password"&gt;&lt;str&gt;123456&lt;/str&gt;&lt;/field&gt;
		&lt;/obj&gt;
	&lt;/ioc&gt;
</pre>
<ul type="disc">
<li>注册了 depose 事件，当整个 Ioc 容器注销时，将 <b>真正 </b>  关闭所有池内连接</li>
</ul>
<div class="hr"><b></b></div>
<h1><a name="Proxool"></a>Proxool</h1>
<div style="float:right;"><a href="#top">Top</a></div>
<h2><a name="proxool:_直接书写_Java_代码"></a>proxool: 直接书写 Java 代码</h2>
<div style="float:right;"><a href="#top">Top</a></div>
<pre>import org.logicalcobwebs.proxool.ProxoolDataSource;

...

ProxoolDataSource ds = new ProxoolDataSource();
ds.setDriver("org.postgresql.Driver");
ds.setDriverUrl("jdbc:postgresql://localhost:5432/mydatabase");
ds.setUser("demo");
ds.setPassword("123456");
...
</pre>
<h2><a name="proxool:_通过_NutzIoc_的_JSON_配置文件"></a>proxool: 通过 Nutz.Ioc 的 JSON 配置文件</h2>
<div style="float:right;"><a href="#top">Top</a></div>
<pre>{
	dataSource : {
		type : "org.logicalcobwebs.proxool.ProxoolDataSource",
		fields : {
			driver : 'org.postgresql.Driver',
			driverUrl : 'jdbc:postgresql://localhost:5432/mydatabase',
			user : 'demo',
			password : '123456'
		}
	}
}
</pre>
<h2><a name="proxool:_通过_NutzIoc_的_XML_配置文件"></a>proxool: 通过 Nutz.Ioc 的 XML 配置文件</h2>
<div style="float:right;"><a href="#top">Top</a></div>
<pre>	&lt;ioc xsi:noNamespaceSchemaLocation="nutz-ioc-0.1.xsd"&gt;
		&lt;obj name="dataSource" type="org.logicalcobwebs.proxool.ProxoolDataSource"&gt;
			&lt;field name="driver"&gt;&lt;str&gt;org.postgresql.Driver&lt;/str&gt;&lt;/field&gt;
			&lt;field name="driverUrl"&gt;&lt;str&gt;jdbc:postgresql://localhost:5432/mydatabase&lt;/str&gt;&lt;/field&gt;
			&lt;field name="user"&gt;&lt;str&gt;demo&lt;/str&gt;&lt;/field&gt;
			&lt;field name="password"&gt;&lt;str&gt;123456&lt;/str&gt;&lt;/field&gt;
		&lt;/obj&gt;
	&lt;/ioc&gt;
</pre>
<ul type="disc">
<li>Proxool 没有提供关闭所有连接的函数，不过你可以参看它的官方文档，自己写一个释放所有连接的类，配置在 Ioc 容器的 depose 事件中</li>
<li>关于 depose 事件，更多详情请参看 <a href="../ioc/events.html">事件监听</a> - <b>通过实现一个触发器</b></li>
</ul>
<div class="hr"><b></b></div>
<h1><a name="BoneCP"></a>BoneCP</h1>
<div style="float:right;"><a href="#top">Top</a></div>
<h2><a name="bonecp:_直接书写_Java_代码"></a>bonecp: 直接书写 Java 代码</h2>
<div style="float:right;"><a href="#top">Top</a></div>
<pre>import com.jolbox.bonecp.BoneCPDataSource;

...

BoneCPDataSource ds = new BoneCPDataSource();
ds.setDriver("org.postgresql.Driver");
ds.setJdbcUrl("jdbc:postgresql://localhost:5432/mydatabase");
ds.setUsername("demo");
ds.setPassword("123456");
...

</pre>
<h2><a name="bonecp:_通过_NutzIoc_的_JSON_配置文件"></a>bonecp: 通过 Nutz.Ioc 的 JSON 配置文件</h2>
<div style="float:right;"><a href="#top">Top</a></div>
<pre>{
	dataSource : {
		type : "com.jolbox.bonecp.BoneCPDataSource",
		events : {
			depose : 'close'
		},
		fields : {
			driverClass : 'org.postgresql.Driver',
			jdbcUrl : 'jdbc:postgresql://localhost:5432/mydatabase',
			username : 'demo',
			password : '123456'
		}
	}
}
</pre>
<h2><a name="bonecp:_通过_NutzIoc_的_XML_配置文件"></a>bonecp: 通过 Nutz.Ioc 的 XML 配置文件</h2>
<div style="float:right;"><a href="#top">Top</a></div>
<pre>	&lt;ioc xsi:noNamespaceSchemaLocation="nutz-ioc-0.1.xsd"&gt;
		&lt;obj name="dataSource" type="com.jolbox.bonecp.BoneCPDataSource"&gt;
			&lt;events&gt;
				&lt;depose&gt;close&lt;/depose&gt;
			&lt;/events&gt;
			&lt;field name="driverClass"&gt;&lt;str&gt;org.postgresql.Driver&lt;/str&gt;&lt;/field&gt;
			&lt;field name="url"&gt;&lt;str&gt;jdbc:postgresql://localhost:5432/mydatabase&lt;/str&gt;&lt;/field&gt;
			&lt;field name="username"&gt;&lt;str&gt;demo&lt;/str&gt;&lt;/field&gt;
			&lt;field name="password"&gt;&lt;str&gt;123456&lt;/str&gt;&lt;/field&gt;
		&lt;/obj&gt;
	&lt;/ioc&gt;
</pre>
<ul type="disc">
<li>注册了 depose 事件，当整个 Ioc 容器注销时，将 <b>真正 </b>  关闭所有池内连接</li>
</ul>
</div>
<div class="zdoc_footer"><em>By:</em><b>zozoh</b><a href="mailto:zozohtnt@gmail.com">&lt;zozohtnt@gmail.com&gt;</a><b>wendal</b><a href="mailto:wendal1985@gmail.com">&lt;wendal1985@gmail.com&gt;</a></div>
</body>
</html>